import {Select} from 'antd'
import React from 'react'
import { Raw } from 'types'

type SeletProps = React.ComponentProps<typeof Select>

interface IdSelectProps extends Omit<SeletProps, 'value' | 'onChange' | 'options'> {
  value?: Raw | null | undefined
  onChange?: (value?: number) => void
  defaultOptionName?: string
  options?: { name: string, id: number }[]
} 

/**
 * value 可以传入多种类型的值 
 * onChange 只会回调number | undefined 类型
 * 当 isNaN 为 true 的时候，代表选择默认类型
 * 当 选择默认类型的时候，onChange会回调undefined
 * @param props 
 */
export const IdSelect = (props: IdSelectProps) => {
  const { value, onChange, defaultOptionName, options,...restProps } = props
  return (
    <Select
      value={options?.length ?toNumber(value) : 0}
      onChange={value => onChange?.(toNumber(value) || undefined)}
      {...restProps}
    >
      {defaultOptionName ? <Select.Option value={0}>{defaultOptionName}</Select.Option> : null}
      {options?.map(option => <Select.Option key={option.id} value={option.id}>{option.name}</Select.Option>)}
    </Select>
  )
}

const toNumber = (value: unknown) => isNaN(Number(value)) ? 0 : Number(value)